package com.atguigu.gmall.all.controller;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.product.client.ProductFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import java.io.File;
import java.io.PrintWriter;
import java.io.Writer;

/**
 * 首页管理
 * @author aaronmegs
 * @create 2020-02-28 7:46 下午
 */
@Controller
public class IndexController {

    @Autowired
    private ProductFeignClient productFeignClient;

    //查询首页数据 一二三级分类
    // 进入首页 渲染页面 www.gmall.com  没有使用静态化技术
//    @GetMapping("/")
//    public String index(Model model) {
//        // 首页 一二三级分类 List<JSONObject>
//        Result result = productFeignClient.getBaseCategoryList();
//        if (result.isOk()) {
//            model.addAttribute("list", result.getData());
//        }
//
//        // 转发视图
//        return "index/index";
//    }

    @Autowired
    private TemplateEngine templateEngine; // 模板引擎

    // 使用静态化技术 提前生成首页 /Users/aaronmegs/index.html 静态化后的页面
    @GetMapping("/createHtml")
    @ResponseBody
    public Result createHtml() throws Exception{
        // 静态化生成到制定位置  Thymeleaf页面标签 静态化模板引擎（进行静态化处理）
        // 1：模板 index.html （要求必须使用Thymeleaf页面标签完成
        // 2:数据
        Result result = productFeignClient.getBaseCategoryList();
        // 就是Map
        Context context = new Context();
        // 三级Map
        context.setVariable("list", result.getData());
        // 3:输出 Writer out 位置 /Users/aaronmegs/index.html
        Writer out = new PrintWriter(new File("/Users/aaronmegs/index.html"), "UTF-8");
        // 4: 模板引擎 参数1：模板   参数2：数据   参数3：输出位置
        templateEngine.process("index/index", context, out);

        return Result.ok().message("首页生成成功");
    }


    // 当用户访问时 直接返回提前生成号的首页
    // 进入首页 渲染页面 ww.gmall.com
    @GetMapping("/")
    public String index() {
        return "index";
    }

}
